package com.lyy.polymorphic.objpoly;


/**
 * @Author:  GZQ
 * @date:  2024/11/17 17:42
 * @description: 对象的多态 (核心、困难、 重点)
 */

public class polyObject {
    /*
    * 需要记住的几句话：
    * (1) 一个对象的编译类型和运行类型可以不一致
    * (2) 编译类型在定义对象时, 就确定了, 不能改变
    * (3) 运行类型是可以变化的
    * (4) 编译类型看定义时 = 号 的左边, 运行类型看 = 号的 右边
    * */

    public static void main(String[] args) {
        // 体验对象多态特点

        // animal 编译类型就是 Animal, 运行类型是 Dog
        Animal animal = new Dog();
        // 因为运行时, 这时即执行到该行时, animal 的运行类型是 Dog, 所以这个cry就是Dog的cry
        animal.cry();  // 小狗汪汪叫

        // 编译类型 是 Animal, 运行类型是 Cat
        animal = new Cat();
        animal.cry(); // 小猫喵喵叫
    }
}
